#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2021/7/23 3:17 下午
# @Author : lihc
# @File : base_page.py

# Base 用于封装公共的方法和组建
import os
from configparser import ConfigParser

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.webdriver import WebDriver


class BasePage:
    # 首页地址
    _home_page_url = ''
    conn = None

    def __init__(self, base_driver=None):

        if base_driver is None:
            self.driverini()
        else:
            # 将self.driver添加一个WebDriver注解，解决IDE智能提示的问题
            # 此处WebDriver 没有任何的赋值意义
            self.driver: WebDriver = base_driver

    # 获取配置文件
    def read_config_file(self):
        # 初始化配置插件
        self.conn = ConfigParser()
        # 配置文件路径
        path = os.path.join(os.path.abspath('..'), 'config.ini')

        # 如果文件不存在，抛出异常
        if not os.path.exists(path):
            raise FileNotFoundError('file not exist')

        # 开始读取文件
        self.conn.read(path)
        return  self.conn

    # 浏览器复用
    def driverini(self):
        # 浏览器复用实现登陆
        option = Options()
        option.debugger_address = '127.0.0.1:9222'
        self.driver = webdriver.Chrome(options=option)

        # 浏览器最大化
        self.driver.maximize_window()
        # 隐式等待
        self.driver.implicitly_wait(5)
        # 打开首页
        self.driver.get(self._home_page_url)

        return self.driver

    # 解决传参时需要在代码中解包的问题
    def find(self, by, locater=None):
        # 只传入一个参数时需要解包
        if locater is None:
            return self.driver.find_element(*by)
        else:
            return self.driver.find_element(by=by, value=locater)

    # 解决传参时需要在代码中解包的问题，多个元素
    def finds(self, by, locater=None):
        # 只传入一个参数时需要解包
        if locater is None:
            return self.driver.find_elements(*by)
        else:
            return self.driver.find_elements(by=by, value=locater)
